﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Do_an_C_sharp.DAL;
using Do_an_C_sharp.BLL;
namespace Do_an_C_sharp.GUI
{
    public partial class XuatHangGUI : Form
    {
        /*
         NOTE:
         * sửa đổi nội dung code để custom lại phần hiển thị lên các datagirdview do LinQ mapping lun đối tượng tham chiêu khóa ngoại
         * biện pháp : đổ dữ liệu lấy trên controller ra một datatable hay dataset,...=>xây dựng 1 hàm chuyển đổi dữ liệu từ List sang datatable(chứa các cột cần thiết)
         * lấy dữ liệu datatable đổ lên datagirdview
         */
        PhieuXuatController PHIEUXUAT = new PhieuXuatController();
        CTPhieuXuatController CTPHIEUXUAT = new CTPhieuXuatController();
        KhachHangController KH = new KhachHangController();
        NhanVienController NV = new NhanVienController();
        HangHoaController HANG = new HangHoaController();
        public XuatHangGUI()
        {
            InitializeComponent();
            List<KhachHang> kh_list = KH.laykhach();
            List<NhanVien> nv_list = NV.laynhanvien();
            List<MatHang> hh_list = HANG.layhang();
            foreach (KhachHang kh in kh_list)
            {
                cbbKhach.Items.Add(kh.MAKHACHHANG);
            }
            foreach (NhanVien nv in nv_list)
            {
                cbbNhanVien.Items.Add(nv.MANHANVIEN);
            }
            foreach (MatHang hh in hh_list)
            {
                cbbCTTenHang.Items.Add(hh.TENHANG);
            }
        }

        private DataTable convertdata_pxuat(List<PXuat> list)
        {
            DataTable table = new DataTable();
            table.Columns.Add("MAPX");
            table.Columns.Add("NGAYXUAT");
            table.Columns.Add("MANHANVIEN");
            table.Columns.Add("MAKHACHHANG");
            foreach (PXuat px in list)
            {
                DataRow row = table.NewRow();
                row["MAPX"]=px.MAPX;
                row["NGAYXUAT"]=px.NGAYXUAT;
                row["MANHANVIEN"]=px.MANHANVIEN;
                row["MAKHACHHANG"] = px.MAKHACHHANG;
                table.Rows.Add(row);
            }
            return table;
        }
        private DataTable convertdata_CTpxuat(List<CTPXuat> list)
        {
            DataTable table = new DataTable();
            table.Columns.Add("MAPX");
            table.Columns.Add("MAHANG");
            table.Columns.Add("SLXUAT");
            table.Columns.Add("DONGIAXUAT");
            table.Columns.Add("THUE");
            foreach (CTPXuat px in list)
            {
                DataRow row = table.NewRow();
                row["MAPX"] = px.MAPX;
                row["MAHANG"] = px.MAHANG;
                row["SLXUAT"] = px.SLXUAT;
                row["DONGIAXUAT"] = px.DONGIAXUAT;
                row["THUE"] = px.THUE;
                table.Rows.Add(row);
            }
            return table;
        }
        private void disable(bool check)
        {
            btnSua.Enabled = btnTimkiem.Enabled = btnXoa.Enabled = btnCTThem.Enabled = btnSuaCT.Enabled = btnXoaCT.Enabled = btnXuat.Enabled = check;
        }
        private void capnhat()
        {
            PHIEUXUAT.luu();
            dataGridViewPhieuXuat.DataSource = convertdata_pxuat(PHIEUXUAT.layphieuxuat());
        }
        private void capnhat_ct()
        {
            CTPHIEUXUAT.luu();
            dataGridViewCTPhieuXuat.DataSource = convertdata_CTpxuat(CTPHIEUXUAT.layctphieuxuat(txtMapx.Text));
        }
        private void XuatHangGUI_Load(object sender, EventArgs e)
        {
            cbbCTTenHang.SelectedIndex = 0;
            cbbKhach.SelectedIndex = 0;
            cbbNhanVien.SelectedIndex = 0;
            enfull();
            radioTimtheoma.Checked = true;
            txtMapx.Enabled = false;
            btnThem.Text = "Thêm";
            btnCTThem.Text = "Thêm";
            btnCTThem.Enabled = false;
            capnhat();
        }

        private void enfull()
        {
            //en toàn bộ control
            gbTimkiem.Enabled = true;
            splitPx_CT.Enabled = true;
            disable(true);
            disenct(true);
        }

        private void dataGridViewPhieuXuat_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            // viết sự kiện để sử lí đưa thông tin lên trên các textbox thông tin phiếu xuất
            int dong = e.RowIndex;
            if (dataGridViewPhieuXuat.Rows[dong].Cells["MAPX"].Value != null)
            {
                string ma = dataGridViewPhieuXuat.Rows[dong].Cells["MAPX"].Value.ToString();
                PXuat px = PHIEUXUAT.timelement(ma);
                txtMapx.Text = px.MAPX;
                dtpNgayxuat.Value = px.NGAYXUAT;
                cbbNhanVien.Text = px.MANHANVIEN;
                cbbKhach.Text = px.MAKHACHHANG;
                //string tennv=px.NhanVien.TENNHANVIEN;
                //MessageBox.Show(tennv);
                //select là hiển thị danh sách các ctphietxuat ra dâtgirdviewCTPhieuXuat
                dataGridViewCTPhieuXuat.DataSource = convertdata_CTpxuat(CTPHIEUXUAT.layctphieuxuat(ma));
            }
        }

        private void dataGridViewCTPhieuXuat_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            // viết sự kiện để sử lí đưa thông tin lên trên các textbox thông tin chi tiết phiếu xuất
            int dong = e.RowIndex;
            if (dataGridViewCTPhieuXuat.Rows[dong].Cells["MAPX"].Value != null)
            {
                string mapx = dataGridViewCTPhieuXuat.Rows[dong].Cells["MAPX"].Value.ToString();
                string mahang = dataGridViewCTPhieuXuat.Rows[dong].Cells["MAHANG"].Value.ToString();
                CTPXuat ctpx = CTPHIEUXUAT.timelement(mapx, mahang);
                cbbCTTenHang.Text = ctpx.MatHang.TENHANG;
                txtCTSoluong.Text = ctpx.SLXUAT.ToString();
                txtCTThue.Text = ctpx.THUE.ToString();
            }
        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void cbbCTTenHang_SelectedIndexChanged(object sender, EventArgs e)
        {
            string tenhang = cbbCTTenHang.Text;
            //MessageBox.Show(mahang);
            MatHang hh =HANG.gethangByten(tenhang);
            if (hh != null)
                txtCTDongia.Text = hh.DGBAN.ToString();
        }

        private void btnXuat_Click(object sender, EventArgs e)
        {
            cbbCTTenHang.Focus();
            txtCTThue.Text = txtCTSoluong.Text = "";
            cbbCTTenHang.Text = "";
            btnCTThem.Enabled = true;
            disenct(false);
        }

        private void disenct(bool p)
        {
            foreach (Control ctr in groupBox1.Controls)
                ctr.Enabled = p;
            gbTimkiem.Enabled = p;
            label11.Enabled = p;
            dataGridViewPhieuXuat.Enabled = p;
            btnSuaCT.Enabled = p;
            btnXoaCT.Enabled = p;
            btnTimkiem.Enabled = p;
            dataGridViewCTPhieuXuat.Enabled = p;
        }

        private void radioTimtheoma_CheckedChanged(object sender, EventArgs e)
        {
            if (radioTimtheoma.Checked == true)
            {
                txtTimtheoma.Enabled = true;
                dtpTimngay.Enabled = false;
            }
            else
            {
                txtTimtheoma.Enabled = false;
                dtpTimngay.Enabled = true;
            }
        }

        private void txtTimtheoma_Click(object sender, EventArgs e)
        {
            txtTimtheoma.SelectAll();
        }

        private void btnCTThem_Click(object sender, EventArgs e)
        {
            if (txtCTThue.Text == "" || txtCTSoluong.Text == "")
            {
                MessageBox.Show("Vui lòng điền đủ thồn tin chi tiết xuất !!!!!!");
            }
            else
            {
                string mahang = "";
                string tenhang = cbbCTTenHang.Text;
                MatHang hh = HANG.gethangByten(tenhang);
                if (hh != null)
                    mahang = hh.MAHANG;
                if (CTPHIEUXUAT.timelement(txtMapx.Text.Trim(), mahang) != null)
                {
                    MessageBox.Show("CT phiếu xuất này đã tồn tại");
                }
                else
                {

                    CTPHIEUXUAT.them(txtMapx.Text.Trim(), mahang, Convert.ToInt32(txtCTSoluong.Text), Convert.ToInt32(txtCTDongia.Text), Convert.ToInt32(txtCTThue.Text));
                    HANG.capnhatsoluong(mahang,-(Convert.ToInt32(txtCTSoluong.Text)));
                    txtMapx.Enabled = false;
                    MessageBox.Show("Thêm thành công");
                    btnCTThem.Enabled = false;
                    btnCTThem.Text = "Thêm";
                    capnhat_ct();
                    enfull();
                    btnCTThem.Enabled = false;
                }
            }
            //sau khi thêm thành công
            
        }

        private void btnTimkiem_Click(object sender, EventArgs e)
        {
            if (radioTimtheoma.Checked == true)
            {
                string ma = txtTimtheoma.Text;
                dataGridViewPhieuXuat.DataSource = convertdata_pxuat(PHIEUXUAT.timma(ma));
            }
            else
            {
                DateTime ngay = dtpTimngay.Value;
                dataGridViewPhieuXuat.DataSource = convertdata_pxuat(PHIEUXUAT.timngay(ngay));
            }
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            DialogResult kt;
            if ((kt = MessageBox.Show("Bạn chắc chắn muốn xóa phiếu xuất này?", "Xác nhận", MessageBoxButtons.OKCancel, MessageBoxIcon.Question)) == DialogResult.OK)
            {
                List<CTPXuat> listct = CTPHIEUXUAT.layctphieuxuat(txtMapx.Text);
                foreach (CTPXuat ct in listct)
                {
                    CTPHIEUXUAT.xoa(ct.MAPX, ct.MAHANG);
                }
                PHIEUXUAT.xoa(txtMapx.Text);
                capnhat();
            }
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            if (btnThem.Text == "Thêm")
            {
                txtMapx.Enabled = true;
                txtMapx.Text = "";
                cbbKhach.Text = "";
                cbbNhanVien.Text = "";
                dtpNgayxuat.Value = DateTime.Now;
                btnThem.Text = "Cập nhật";
                gbTimkiem.Enabled = false;
                splitPx_CT.Enabled = false;
                disable(false);
            }
            else
            {
                if (PHIEUXUAT.timelement(txtMapx.Text.Trim()) != null)
                {
                    MessageBox.Show("Mặt hàng này đã tồn tại");
                }
                else
                {
                    if(txtMapx.Text=="")
                    {
                        MessageBox.Show("Mã phiếu xuất không được bỏ trống!!!!!");
                    }
                    else{
                        PHIEUXUAT.them(txtMapx.Text.Trim(), cbbNhanVien.Text, cbbKhach.Text, dtpNgayxuat.Value);
                        txtMapx.Enabled = false;
                        MessageBox.Show("Thêm thành công");
                        btnThem.Text = "Thêm";
                        capnhat();
                        gbTimkiem.Enabled = true;
                        splitPx_CT.Enabled = true;
                        disable(true);
                    }
                }
            }
        }

        private void btnSua_Click(object sender, EventArgs e)
        {
            if (PHIEUXUAT.sua(txtMapx.Text,cbbNhanVien.Text,cbbKhach.Text,dtpNgayxuat.Value))
                MessageBox.Show("Sửa thành công");
            else
                MessageBox.Show("Thất bại vì lỗi update sql");
            capnhat();
        }

        private void btnXoaCT_Click(object sender, EventArgs e)
        {
            string mahang = "";
            string tenhang = cbbCTTenHang.Text;
            MatHang hh = HANG.gethangByten(tenhang);
            if (hh != null)
                mahang = hh.MAHANG;
            DialogResult kt;
            if ((kt = MessageBox.Show("Bạn chắc chắn muốn xóa CT phiếu xuất này?", "Xác nhận", MessageBoxButtons.OKCancel, MessageBoxIcon.Question)) == DialogResult.OK)
            {
                CTPHIEUXUAT.xoa(txtMapx.Text, mahang);
                capnhat_ct();
            }
        }

        private void btnSuaCT_Click(object sender, EventArgs e)
        {
            if (txtCTSoluong.Text == "" || txtCTThue.Text == "")
            {
                MessageBox.Show("Vui lòng điền đầy đủ thông tin chi tiết xuất!!!!");
            }
            else
            {
                string mahang = "";
                string tenhang = cbbCTTenHang.Text;
                MatHang hh = HANG.gethangByten(tenhang);
                if (hh != null)
                    mahang = hh.MAHANG;
                if (CTPHIEUXUAT.sua(txtMapx.Text, mahang, Convert.ToInt32(txtCTSoluong.Text), Convert.ToInt32(txtCTDongia.Text), Convert.ToDouble(txtCTThue.Text)))
                    MessageBox.Show("Sửa thành công");
                else
                    MessageBox.Show("Thất bại vì lỗi update sql");
                capnhat_ct();
            }
        }

        private void txtMapx_Click(object sender, EventArgs e)
        {
            TextBox t = (TextBox)sender;
            t.SelectAll();
        }

        private void txtCTSoluong_KeyPress(object sender, KeyPressEventArgs e)
        {
            char c = e.KeyChar;
            if (!char.IsDigit(c))
                if (c != '\b')
                    e.Handled = true;
        }

        private void txtCTThue_KeyPress(object sender, KeyPressEventArgs e)
        {
            char c = e.KeyChar;
            if (!char.IsDigit(c))
            {
                if (c == '\b')
                {
                }
                else
                {
                    if (c == '.')
                    {
                        if (txtCTThue.Text.IndexOf(c) == -1)
                        {
                            if (txtCTThue.Text == "")
                                e.Handled = true;
                        }
                        else
                            e.Handled = true;
                    }
                    else
                        e.Handled = true;
                }
            }
        }
    }
}
